package com.lf.enums;

import com.lf.handler.EnumJsonDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

import java.util.Objects;

/**
 * 枚举接口
 * shape = JsonFormat.Shape.OBJECT 用于返回JSON对象
 */
@JsonDeserialize(using = EnumJsonDeserializer.class)
public interface CodeBaseEnum {
    int code();

    String msg();

    /**
     * 根据code获取枚举类
     *
     * @param enumClass
     * @param code
     * @param <E>
     * @return
     */
    static <E extends Enum<?> & CodeBaseEnum> E codeOf(Class<E> enumClass, int code) {
        E[] enumConstants = enumClass.getEnumConstants();
        for (E e : enumConstants) {
            if (e.code() == code)
                return e;
        }
        return null;
    }

    static <E extends Enum<?> & CodeBaseEnum> E codeOf(Class<E> enumClass, String name) {
        E[] enumConstants = enumClass.getEnumConstants();
        for (E e : enumConstants) {
            if (Objects.equals(e.name(), name))
                return e;
        }
        return null;
    }
}